home *** CD-ROM | disk | FTP | other *** search
- #include <string.h>
-
- /***
- * Send an email message
- *
- * to - The intended recipient.
- * sub - The subject of the message.
- * bod - The message body.
- *
- * returns 0 on success
- * -1 on failure.
- *
- ***/
-
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <errno.h>
-
- #include "config.h"
-
- #ifndef MAILER
- #define MAILER "/usr/bin/mail"
- #endif
-
-
- void *malloc();
-
- int send_email(to,sub,body)
- char *to, *sub, *body;
- {
- int fd[2], pid;
- FILE *f1;
- char *msg;
-
- msg = (char *) malloc(strlen(body)+strlen(sub)+strlen(to)+16);
-
- sprintf(msg,"To: %s\n",to);
- strcat(msg,"Subject: "); strcat(msg,sub);strcat(msg,"\n");
- strcat(msg,body);
-
- /* set child process STDIN to parent fd */
-
- if (pipe(fd) <0)
- return(-1);
-
- if ((pid = fork()) < 0)
- return(-1);
- else if (pid >0) { /* parent */
- close(fd[0]); /* close read end */
- write(fd[1], msg, strlen(msg));
- close(fd[1]);
- if (waitpid(pid, NULL, 0) <0)
- return(-1);
- /* close(fd[1]); */
- return(0);
- } else { /* child */
- close(fd[1]);
- if (fd[0] != STDIN_FILENO) {
- if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO)
- return(-1);
- close(fd[0]);
- } /* invoke mailer which expects STDIN */
- if (execl(MAILER,MAILER,to,0) <0)
- return(-1);
- close(fd[0]);
- exit(0);
- }
- return(0);
- }
-